package com.ruoyi.school.service;

import com.ruoyi.school.domain.PacAuditRecords;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.school.domain.dto.PacAuditApplyDTO;
import com.ruoyi.school.domain.dto.PacAuditRecordsListDTO;
import com.ruoyi.school.domain.vo.PacAuditRecordsVo;
import com.ruoyi.school.domain.vo.StatisticsVo;
import com.ruoyi.system.domain.TableData;

import java.util.List;

/**
* @author jeremylin
* @description 针对表【pac_audit_records(审批记录)】的数据库操作Service
* @createDate 2025-05-25 15:33:27
*/
public interface PacAuditRecordsService extends IService<PacAuditRecords> {

    boolean add(PacAuditRecords pacAuditRecords);

    /**
     * 分页查询
     *
     * @param pacAuditRecords
     * @return
     */
    TableData<PacAuditRecordsVo> getList(PacAuditRecordsListDTO pacAuditRecords);

    /**
     * 查看审批详情
     * @param pacAuditRecords
     * @return
     */
    PacAuditRecords details(PacAuditRecords pacAuditRecords);

    /**
     * 审核
     * @param pacAuditRecords
     */
    void audit(PacAuditRecords pacAuditRecords);

    /**
     * 学生发起申请
     * @param pacAuditRecords
     */
    void apply(PacAuditApplyDTO pacAuditRecords);

    /**
     * 学术删除审批记录
     * @param pacAuditRecords
     */
    void delete(PacAuditRecords pacAuditRecords);

    /**
     * 导出学生的申请记录
     *
     * @param pacAuditRecords
     * @return
     */
    List<PacAuditRecords> myExport(PacAuditRecords pacAuditRecords);

    /**
     * 根据ids找到申请记录
     * @param outputIds
     * @return
     */
    List<PacAuditRecords> getByRecordsIds(List<Long> outputIds);

    /**
     * 根据id，找到对应的审批记录并删除
     * @param id
     */
    void deleteByOutPutId(Long id, Integer type);

    /**
     * 对应审批记录更新，也要更新审批的记录
     * @param pacAuditRecords
     * @return
     */
    boolean updateByRecord(PacAuditRecords pacAuditRecords);

    TableData<PacAuditRecordsVo> getListByTeacher(PacAuditRecordsListDTO pacAuditRecordsListDTO);

    /**
     * 查询已通过审核的 荣誉
     * @param stuId
     * @return
     */
    List<PacAuditRecords> getPassed(Long stuId);

    /**
     * 中队长获取审批记录
     * @param pacAuditRecordsListDTO
     * @return
     */
    TableData<PacAuditRecordsVo> listByCaptain(PacAuditRecordsListDTO pacAuditRecordsListDTO);

    /**
     * 获取最新通过审核的5条数据
     *
     * @return
     */
    List<PacAuditRecords> getTop5();

    /**
     * 获取统计信息
     *
     * @return
     */
    StatisticsVo getStatistics();

    /**
     * 入党申请
     * @param pacAuditRecords
     */
    void applyEntry(PacAuditApplyDTO pacAuditRecords);
}
